package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

@ResponseBody
@Controller
@RequestMapping("/user")
public class UserController {
    //RequestMapping post和get请求都可以进行发送，在属性中的时候，指定method的时候，只能用特定的属性
    @RequestMapping(value = "/hello/t2", method = RequestMethod.GET)
    public String hello(){
        return "hello";
    }
    @RequestMapping("/r1")
    public String r1(String name){
        return "接收到参数 name:"+name;
    }

    @RequestMapping("/r2")
    public String r2(Integer age){
        return "接收到参数 age:"+age;
    }

    @RequestMapping("/r3")
    public String r3(String name,Integer age){
        return "name:"+name+",age:"+age;
    }

    @RequestMapping("/r4")
    public String r4(User user){
        return user.toString();
    }
    @RequestMapping("/r5")
    //RequestParam这个设置，如果写了就必须传递这个参数，如果没有写就就抛出异常
    //可以为这个参数进行起别名
    //还可以设置默认值，如果设置了默认值，required就变成false了。写了默认值没有传递这个参数的时候，就显示的是默认值
    public String r5(@RequestParam(value = "name",required = false,defaultValue = "李四") String username, @RequestParam("age") Integer userage){
        return "username:"+username+",age:"+userage;
    }
    @RequestMapping("/r6")
    //传递数组的时候，有两种形1.当一个别量名多次出现的时候，就认为是数组
                    //      2.当用逗号隔开的时候，也是被认为是数组
    public String r6(String[] arr){
        return Arrays.toString(arr)+",length:"+arr.length;
    }
    @RequestMapping("/r7")
    public String r7(@RequestParam(value = "list", required = false) List<String> list){
        if (list!=null){
            return list.toString()+",size:"+list.size();
        }
        return "list为空";
    }
    @RequestMapping("/r9/{articleId}")
    //可以为这个id进行起别名
    //不起别名的时候，如果在名字不一致就会报错
    public String r9(@PathVariable Integer articleId){
        return "articleId:"+articleId;
    }
    @RequestMapping("/r10/{name}/{age}")
    public String r10(@PathVariable("name") String userName, @PathVariable Integer age){
        return "name:"+userName+",age:"+age;
    }
    @RequestMapping("/r11")
    //这个属性用于接收二进制文件，比较复杂的请求域
    public String r11(@RequestPart("file") MultipartFile myFile) throws IOException {
        String fileName = myFile.getOriginalFilename();
        //针对上次的上传文件的时候，还对这个文件还进行换了名字
        myFile.transferTo(new File("D:/upload1118/"+fileName));
        //这一步步骤将上传的文件存储到本地磁盘中
        return "获取上传文件: "+myFile.getOriginalFilename();
    }
}
